package com.jxpanda.spring.module.wechat.component.message.pojo.template.section;


import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;

/**
 * 模板卡片的基础结构，包括卡片类型和共通属性
 */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TemplateCard {
    /**
     * 卡片类型，定义卡片的基本模板
     */
    @JsonProperty("card_type")
    private String cardType;

    /**
     * 来源信息，描述卡片的来源，如图标、描述和颜色
     */
    @JsonProperty("source")
    private Source source;

    /**
     * 卡片的主要标题和描述
     */
    @JsonProperty("main_title")
    private MainTitle mainTitle;

    /**
     * 任务ID，用于关联卡片与后端任务
     */
    @JsonProperty("task_id")
    private String taskId;

    /**
     * 动作菜单，提供卡片的交互行为选项
     */
    @JsonProperty("action_menu")
    private ActionMenu actionMenu;

    /**
     * 引用区域，用于引用相关内容或网页
     */
    @JsonProperty("quote_area")
    private QuoteArea quoteArea;

    /**
     * 突出内容，用于重点显示的信息
     */
    @JsonProperty("emphasis_content")
    private EmphasisContent emphasisContent;

    /**
     * 子标题文本，提供卡片的次级信息展示
     */
    @JsonProperty("sub_title_text")
    private String subTitleText;

    /**
     * 卡片动作，定义卡片的主要交互逻辑，如打开链接或小程序
     */
    @JsonProperty("card_action")
    private CardAction cardAction;

    /**
     * 水平内容列表，展示一系列的键值对信息
     */
    @JsonProperty("horizontal_content_list")
    private List<HorizontalContent> horizontalContentList;

    /**
     * 跳转列表，定义卡片中的多个跳转动作
     */
    @JsonProperty("jump_list")
    private List<Jump> jumpList;


    /****************************************
     /** 以下为按钮选择型消息的特有属性
     /****************************************

    /**
     * 按钮选择，提供交互式的按钮选择。
     */
    @JsonProperty("button_selection")
    private ButtonSelection buttonSelection;

    /**
     * 按钮列表，定义卡片中的可交互按钮。
     */
    @JsonProperty("button_list")
    private List<Button> buttonList;

    /****************************************
    /** 以下为图文展示型消息的特有属性
    /****************************************

    /**
     * 图文区域，用于展示图像和文字。
     */
    @JsonProperty("image_text_area")
    private ImageTextArea imageTextArea;

    /**
     * 卡片图像，展示主要图像。
     */
    @JsonProperty("card_image")
    private CardImage cardImage;

    /**
     * 垂直内容列表，用于展示垂直排列的内容。
     */
    @JsonProperty("vertical_content_list")
    private List<VerticalContent> verticalContentList;

    /****************************************
     /** 以下为投票选择型消息的特有属性
     /****************************************

    /**
     * 复选框组件，用于投票或多选问卷。
     */
    @JsonProperty("checkbox")
    private Checkbox checkbox;

    /**
     * 提交按钮，用于提交用户的选择。
     */
    @JsonProperty("submit_button")
    private Button submitButton;

}
